package InnerClass;

public class StaticInnerClass {
    public static void main(String[] args) {
        Outer05 outer05 = new Outer05();
        //外部其他类如果访问静态内部类
        //1.
        //因为静态内部类是可以通过类名直接访问的
        Outer05.Inner05 inner05 = new Outer05.Inner05();
        inner05.say();
        //2.在外部类中编写一个方法返回内部类的对象实例
        Outer05.Inner05 inner051 = outer05.getInner05();
        inner051.say();
        //3.在外部类中编写一个静态的方法返回内部类的对象实例，然后通过类名直接调用
        Outer05.Inner05 inner05_ = Outer05.getInner05_();
        inner05_.say();
    }
}

class Outer05{
    private int n1 = 66;
    private static String name = "李华";
    //静态内部类
    //1.放在外部类的成员位置
    //2.使用static修饰
    //3.只能访问外部类的静态成员,包括私有
    //4.可以添加任意修饰符
    //5.如果外部类和静态内部类成员重名时，遵循就近原则，如果想访问外部类成员，可以使用(外部类名.成员名)
    //因为此时的外部成员是静态的，所以不需要this
    public static class Inner05{
        private String name = "jack";
        public void say(){
            //System.out.println(n1);//err
            System.out.println(name + "外部类name" + Outer05.name);
        }
    }
    //外部类要想访问静态内部类，需要先创建一个对象，在访问
    public void f1(){
        Inner05 inner05 = new Inner05();
        inner05.say();
    }

    public Inner05 getInner05(){
        return new Inner05();
    }

    public static Inner05 getInner05_(){
        return new Inner05();
    }
}